#include "flatiron.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


    /*ACCESSEURS*/

int GetXIron(const FLATIRON *iron)
{
	return iron->x;
}

int GetYIron(const FLATIRON *iron)
{
	return iron->y;
}

void GetXYIron(const FLATIRON *iron,int *x,int *y)
{
	*x=GetXIron(iron);
	*y=GetYIron(iron);
}

int GetVitesseXIron(const FLATIRON *iron)
{
	return iron->vitesseX;
}

int GetVitesseYIron(const FLATIRON *iron)
{
	return iron->vitesseY;
}

void GetVitesseXYIron(const FLATIRON *iron, int *dx, int *dy)
{
	*dx=GetVitesseXIron(iron);
	*dy=GetVitesseYIron(iron);
}

int GetVieIron(const FLATIRON *iron)
{
	return iron->vie;
}

int GetCapaciteIron(const FLATIRON *iron)
{
	return iron->capacite;
}

int GetADroite(const FLATIRON *iron)
{
	return iron->aDroite;
}

int GetVapeur(const FLATIRON * iron)
{
	return iron->vapeur;
}

int GetVapeurX(const FLATIRON *iron)
{
	return iron->vapeurX;
}

int GetVapeurY(const FLATIRON *iron)
{
	return iron->vapeurY;
}

int GetVapeurDX(const FLATIRON *iron)
{
	return iron->vapeurDX;
}


    /*MUTATEURS*/

void SetXIron(FLATIRON *iron, const int x)
{
	assert(iron);
	iron->x=x;
}

void SetYIron(FLATIRON *iron, const int y)
{
	assert(iron);
	iron->y=y;
}

void SetXYIron(FLATIRON *iron,const int x,const int y)
{
	assert(iron);
	SetXIron(iron,x);
	SetYIron(iron,y);
}


void SetVitesseXIron(FLATIRON *iron, const int dx)
{
	assert(iron);
	iron->vitesseX=dx;
}


void SetVitesseYIron(FLATIRON *iron, const int dy)
{
	assert(iron);
	iron->vitesseY=dy;
}



void SetVieIron(FLATIRON *iron, const int vie)
{
	assert(iron);
	iron->vie=vie;
}


void SetCapaciteIron(FLATIRON *iron, const int capacite)
{
	assert(iron);
	iron->capacite=capacite;
}

void SetADroite(FLATIRON *iron, const int droite)
{
	assert(iron);
	iron->aDroite=droite;
}

int GetSpriteIron(const FLATIRON *iron)
{
    assert(iron);
    return iron->sprite;
}

void SetSpriteIron(FLATIRON *iron, int n)
{
    assert(iron);
    iron->sprite = n;
}

void SetVapeur(FLATIRON * iron, const int n)
{
	iron->vapeur=n;
}

void SetVapeurX(FLATIRON * iron, const int n)
{
	iron->vapeurX=n;
}

void SetVapeurY(FLATIRON * iron, const int n)
{
	iron->vapeurY=n;
}

void SetVapeurDX(FLATIRON * iron, const int n)
{
	iron->vapeurDX=n;
}


    /*AUTRES*/

/* PENSER A ECRIRE UNE FONCTION INITIALISER_IRON */
FLATIRON* CreerIron()
{
	FLATIRON *iron;
	iron = (FLATIRON*)malloc(sizeof(FLATIRON));
	assert(iron);
	SetCapaciteIron(iron, 0);
	SetVieIron(iron, 3);
	SetXIron(iron, 0);
	SetYIron(iron, 0);
	SetVitesseYIron(iron, 0);
	SetVitesseXIron(iron, 0);
	iron->aDroite=1;
	iron->vapeur=0;
	iron->vapeurX=0;
	iron->vapeurY=0;
	iron->vapeurDX=0;
	iron->sprite=0;
	return iron;
}


void DeplacerXIron(FLATIRON *iron)
{
	assert(iron);
	iron->x=iron->x+iron->vitesseX;
}

void DeplacerYIron(FLATIRON *iron)
{
	assert(iron);
	iron->y=iron->y+iron->vitesseY;
}

void InitialiserIronNiveau(FLATIRON *iron,const int x, const int y)
{
	assert(iron);
	SetXYIron(iron,x,y);
}

void TestamentIron(FLATIRON **iron)
{
	assert(*iron);
	free(*iron);
	*iron = NULL;
}

void AccelerationXIron(FLATIRON *iron, const int dx)
{
	assert(iron);
	iron->vitesseX=iron->vitesseX+dx;
}


void AccelerationYIron(FLATIRON *iron, const int dy)
{
	assert(iron);
	iron->vitesseY=iron->vitesseY+dy;
}

void AfficheIron(const FLATIRON *iron)
{
	printf("position X : %d \n", GetXIron(iron));
	printf("position Y : %d \n", GetYIron(iron));
	printf("VitesseX : %d \n", GetVitesseXIron(iron));
	printf("VitesseY : %d \n", GetVitesseYIron(iron));
	printf("Vie : %d \n", GetVieIron(iron));
	printf("Capacite : %d \n\n", GetCapaciteIron(iron));
}

void TirVapeur(FLATIRON * iron)
{
	SetVapeurY(iron,GetYIron(iron));
	if (GetADroite(iron))
	{
		SetVapeurDX(iron,Vitesse_vapeur_);
		SetVapeurX(iron,GetXIron(iron)+20);
	}
	else
	{
		SetVapeurDX(iron,-Vitesse_vapeur_);
		SetVapeurX(iron,GetXIron(iron));
	}
	SetVapeur(iron,Duree_vie_vapeur_);
}

void MurVapeur(FLATIRON * iron)
{
	SetVapeurDX(iron,0);
	SetVapeurY(iron,GetYIron(iron));
	if (GetADroite(iron))
	{
		SetVapeurX(iron,GetXIron(iron)+40);
	}
	else
	{
		SetVapeurX(iron,GetXIron(iron)-20);
	}
	SetVapeur(iron,Duree_vie_vapeur_);
}
